package cn.louzen.utils;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtil {
    // 匹配sampleOrgUser中userx类型用户名的正则表达式
    // 确保以user开头，以数字结尾，其中数字除0外不能以0开头，例如01,09是不合法的
    private static final Pattern sampleUserPat_userx = Pattern.compile("^user([0-9]|([1-9][0-9]+))$");

    /**
     * 例如，str为"A@a,B@b,C@c"，firstSplit为","，secondSplit为"@"，
     * str会被先分为"A@a","B@b","C@c"三段字符串，
     * 后被分为"A"，"a"，"B"，"b"，"C"，"c"6段字符串，
     * 最后拼成三组键值对"A":"a"，"B":"b"，"C":"c"，作为Map的三个元素并返回Map
     *
     * @param completeStr
     * @param firstSplit
     * @param secondSplit
     * @return Map
     */
    public static Map<String, String> stringToMap(String completeStr, String firstSplit, String secondSplit)
            throws Exception {
        HashMap<String, String> map = new HashMap<String, String>();

        // 第一次分裂字符串
        String[] strs1 = completeStr.split(firstSplit);

        // 第二次分裂，并作为键值对存入map
        for (String str1 : strs1) {
            String[] strs2 = str1.split(secondSplit);
            if (strs2.length != 2) {
                throw new Exception("分解的字符串不是成对的，错误串: " + completeStr);
            }

            String key = strs2[0];
            String val = strs2[1];
            map.put(key, realStr(val));
        }

        return map;
    }

    /**
     * 主要目的是为了在读properties配置文件时，如果读到"null"字符串就返回null对象而不是"null"
     * null空，是没有字符串的意思，而"null"是一个字符串，二者存在区别
     *
     * @param str
     * @return
     */
    public static String realStr(String str) {
        if (str.equals("null")) {
            str = null;
        }
        return str;
    }

    // 利用Pattern对象sampleUserPat_userx来测试sampleUser中的userx用户命名是否符合规则
    public static boolean matchSampleUser_userx(String userName) {
        Matcher matcher = sampleUserPat_userx.matcher(userName);
        return matcher.matches();
    }
}
